package com.itheima.config;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

/**
 * @author by itheima
 * @Date 2022/4/25
 * @Description 定义servlet容器（tomcat内置servlet容器），一旦启动，会回调对应的方法
 *  当前类无需被spring 容器管理
 */
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {

    /**
     * createServletApplicationContext：表示构建servlet应用上下文容器对象，本质上就是一个IOC容器对象
     *   WebApplicationContext extends ApplicationContext
     * @return
     */
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        //加载配置类初始化IOC容器对象
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        //加载springmvc的配置类（注册）,底层会解析springmvc的配置类，完成ioc容器初始化操作
        context.register(SpringMvcConfig.class);
        return context;
    }

    /**
     * 定义spring内置的核心调度器（servlet）的拦截规则
     * 说白了就是告诉springmvc请求路径的拦截规则
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        //springmvc拦截一切请求资源 底层维护一个核心调度器DispatcherServlet，拦截规则为所有
        return new String[]{"/"};
    }

    /**
     * TODO
     * @return
     */
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}
